//
//  CZHomeViewController.swift
//  git
//
//  Created by 徐 鹏超 on 16/4/8.
//  Copyright © 2016年 徐 鹏飞. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD
let CZHomeViewControllerReusableIdentifier = "CZHomeViewControllerReusableIdentifier"

class CZHomeViewController: CZBaseViewController {
    // 让访客视图,填充整个视图
    // loadView 是干什么用的? 用于创建视图,如果 你没有自定义视图,调用父类方法,可以直接创建视图
    // 如果你自定义视图,没有调用 super.loadView方法, 可以将 view 指定到自定义视图上
//    override func loadView(){
//        print("loadView")
//        
//        let visitor = CZVisitorView()
//        //调用核心动画
//        visitor.startAnimation()
//        
//        view = visitor
//        
//    }

    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        if isBaseLogin{
            getData()
            
            tableView.dataSource = self
            
            tableView.registerClass(CZHomeTableViewCell.self, forCellReuseIdentifier: CZHomeViewControllerReusableIdentifier)
            
            tableView.rowHeight = UITableViewAutomaticDimension//200
            
            // 还需要设置一个 预行高
            tableView.estimatedRowHeight = 100
            
//            tableView.rowHeight = 200
            
            tableView.rowHeight = UITableViewAutomaticDimension//200
            
            // 还需要设置一个 预行高
            tableView.estimatedRowHeight = 100
            /*
            erminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'table view row height must not be negative - provided height for index path (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}) is -1.000000'
            
            */
            
            // 添加到 footerView
            tableView.tableFooterView = pullView
            
            tableView.addSubview(refreshView)
            
            refreshView.addTarget(self, action: "reLoadData", forControlEvents: UIControlEvents.ValueChanged)
            
        }else{
        visitor.setupInfo(nil, message: "关注一些人，回这里看看有什么惊喜")
        }
        
    }
    
    //MARK:-- 刷新方法
    func reLoadData(){
        
        printLog("去刷新数据")
        getData()
    }
    
    //MARK:--懒加载
    /// 用于盛放转换后的对象
    private lazy var statusList: [CZStatusModel] = [CZStatusModel]()

    
    /// 添加一个小菊花
    private lazy var pullView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)


    ///自定义下拉刷新视图
    private lazy var refreshView: CZRefreshControl = CZRefreshControl()
    
    
}



extension CZHomeViewController{
    private func getData(){
        
        // 1. 请求的url
        let url = "https://api.weibo.com/2/statuses/home_timeline.json"
        // 2. 请求参数
        /*
        必选 	类型及范围 	说明
        access_token 	true 	string 	采用OAuth授权方式为必填参数，OAuth授权后获得。
        since_id 	false 	int64 	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        max_id 	false 	int64 	若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        count 	false 	int 	单页返回的记录条数，最大不超过100，默认为20。
        page 	false 	int 	返回结果的页码，默认为1。
        */
        /*
        "access_toke" = "2.00TB2V3G0LGd8fe89cc6c9521UHzUD";
        count = 200;
        */
        guard let token = CZUserModel.getModel()?.access_token else{
            return
        }
        
        // 刚开始默认的时候 ,max_id = 0,since_id = 0
        var since_id = 0
        var max_id = 0
        
        // 需要运行加载更多
        if pullView.isAnimating(){
            
            
            since_id = 0//3963115627055286
            
            max_id =  statusList.last?.id ?? 0 //0//3963116079181841
            if max_id > 0 {
                max_id = max_id - 1
            }
        }

        
        let params = ["access_token":token,
            "count":20]
        
        // 建议在和后台接口调试的时候,打印一下参数,以方便给后台人员调试
        printLog(params)
        
        // 3.Get请求
        let afn = AFHTTPSessionManager()
        // 添加一个 提示视图
        SVProgressHUD.show()
        
        afn.GET(url, parameters: params, progress: nil, success: { (_, JSON) -> Void in
            printLog(JSON)
            
            // 字典转模型,进行解析
            // JSON AnyObject? 转换成字典
            guard let json = JSON as? [String: NSObject] else {
                return
            }
            // statuses 应该是一个数组 实际是 let statuses: NSObject?
            // NSObject? 转换成一个数组 [[String:NSObject]]
            let statuses = json["statuses"] as?  [[String:NSObject]]
            
            // 因为 [[String : NSObject]]? 是一个可选, 有可能有值,有可能为 nil
            // 如果为 nil, 对他遍历是无效的,所以需要进行解包操作
            guard let statusesOK = statuses else {
                return
            }
            
            var temp = [CZStatusModel]()
            
            // 遍历实现字典转模型
            for status in statusesOK {
                
                let model = CZStatusModel(dic: status)
                
                printLog(model.id)
                
                temp.append(model)
            }
            
            // 上提更多
            if max_id > 0 {
                
                // 数组后边 拼接数据
                // 数组怎么拼接 +
                self.statusList = self.statusList + temp
            } else {
                // max_id = 0 或者 小于0的时候: 刚开始默认的时候和 下拉刷新的时候
                self.statusList = temp + self.statusList
            }
            // 让刷新停止
            // 学习系统,调用一下加载完成的方法
            self.refreshView.endRefreshing()
            
            // 当数据成功之后, 让小菊花 停止转动
            if self.pullView.isAnimating() {
                
                self.pullView.stopAnimating()
                
            }
            
            //不懂
            // 遍历完成之后,应该刷新数据
            self.tableView.reloadData()
            
            SVProgressHUD.dismiss()
            }) { (_, error) -> Void in
                printLog(error)
                SVProgressHUD.showErrorWithStatus(error.description)
        }

        
        
        
    }
    
}

// MARK:-- 数据源方法
extension CZHomeViewController{
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(CZHomeViewControllerReusableIdentifier, forIndexPath: indexPath) as! CZHomeTableViewCell
        
        if indexPath.row == statusList.count - 1 && !pullView.isAnimating(){
            // 先给用户一个 加载的感觉
            pullView.startAnimating()
            // 让他去加载更多数据
            getData()
            
        }
        
        
        cell.statusModel = self.statusList[indexPath.row]
        
        
        
        return cell
    }
    
    
    
}










